package com.air.service.impl;


import com.air.constant.MessageConstant;
import com.air.dto.PassengerDTO;
import com.air.dto.PassengerLoginDTO;
import com.air.dto.PassengerPageQueryDTO;
import com.air.dto.PassengerRegisterDTO;
import com.air.entity.Passenger;
import com.air.exception.AccountNotFoundException;
import com.air.exception.PasswordErrorException;
import com.air.mapper.PassengerMapper;
import com.air.result.PageResult;
import com.air.service.PassengerService;
import com.air.vo.PassengerVO;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class PassengerServiceImpl implements PassengerService {

    @Autowired
    private PassengerMapper passengerMapper;
    /**
     * 旅客注册
     * @param passengerDTO
     */
    @Override
    public void save(PassengerRegisterDTO passengerDTO) {

        // 创建Passenger对象，用于后续的数据操作
        Passenger passenger = new Passenger();

        // 将PassengerDTO对象的属性值复制到Passenger对象中，实现数据的初始化
        BeanUtils.copyProperties(passengerDTO,passenger);

        // 设置默认密码，为了确保账号安全，实际开发中应使用更安全的密码策略
        passenger.setPassword("123456");

        // 将Passenger对象插入数据库，完成新增操作
        passengerMapper.insert(passenger);

    }

    /**
     * 旅客登录
     * @param passengerLoginDTO
     * @return
     */
    @Override
    public Passenger login(PassengerLoginDTO passengerLoginDTO) {
        // 从乘客登录DTO中获取用户名和密码，用于后续的验证
        String username = passengerLoginDTO.getUsername();
        String password = passengerLoginDTO.getPassword();
        // 根据用户名查询数据库中对应的乘客信息
        Passenger passenger = passengerMapper.getByUsername(username);
        // 验证用户名是否存在，如果不存在则抛出账户未找到异常
        if (passenger == null) {
            //账号不存在
            throw new AccountNotFoundException(MessageConstant.ACCOUNT_NOT_FOUND);
        }
        // 验证密码是否正确，如果密码不匹配则抛出密码错误异常
        if (!password.equals(passenger.getPassword())) {
            //密码错误
            throw new PasswordErrorException(MessageConstant.PASSWORD_ERROR);
        }
        // 如果用户名和密码验证通过，返回对应的乘客实体
        return passenger;

    }

    /**
     * 旅客分页查询
     * @param passengerPageQueryDTO
     * @return
     */
    @Override
    public PageResult pageQuery(PassengerPageQueryDTO passengerPageQueryDTO) {
        // 根据乘客查询条件初始化分页信息
        PageHelper.startPage(passengerPageQueryDTO.getPage(), passengerPageQueryDTO.getPageSize());
        // 执行乘客信息的分页查询
        Page<PassengerVO> page = passengerMapper.pageQuery(passengerPageQueryDTO);
        // 构造并返回分页查询结果
        return new PageResult(page.getTotal(), page.getResult());

    }

    /**
     * 根据id查询旅客
     * @param id
     * @return
     */
    @Override
    public PassengerVO getById(Long id) {
        // 根据id查询旅客
        PassengerVO passenger = passengerMapper.getById(id);
        // 返回查询结果
        return passenger;
    }

    /**
     * 修改旅客信息
     * @param passengerDTO
     */
    @Override
    public void update(PassengerDTO passengerDTO) {
        // 创建Passenger对象，用于后续的数据操作
        Passenger passenger = new Passenger();
        // 将PassengerDTO对象的属性值复制到Passenger对象中，实现数据的初始化
        BeanUtils.copyProperties(passengerDTO,passenger);
        // 执行修改操作
        passengerMapper.update(passenger);
    }
}
